Extracting essential data from a dataset and displaying it is a necessary part of data science; therefore individuals can make correct decisions based on the data. In this assignment, you will extract some stock data, you will then display this data in a graph.
Estimated Time Needed: 30 min
!pip install yfinance==0.1.67
#!pip install pandas==1.3.3
#!pip install requests==2.26.0
!mamba install bs4==4.10.0 -y
#!pip install plotly==5.3.1
Requirement already satisfied: yfinance==0.1.67 in c:\users\younis\anaconda3\lib\site-packages (0.1.67) Requirement already satisfied: numpy>=1.15 in c:\users\younis\anaconda3\lib\site-packages (from yfinance==0.1.67) (1.19.2) Requirement already satisfied: multitasking>=0.0.7 in c:\users\younis\anaconda3\lib\site-packages (from yfinance==0.1.67) (0.0.10) Requirement already satisfied: pandas>=0.24 in c:\users\younis\anaconda3\lib\site-packages (from yfinance==0.1.67) (1.2.3) Requirement already satisfied: lxml>=4.5.1 in c:\users\younis\anaconda3\lib\site-packages (from yfinance==0.1.67) (4.6.3) Requirement already satisfied: requests>=2.20 in c:\users\younis\anaconda3\lib\site-packages (from yfinance==0.1.67) (2.27.1) Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\younis\anaconda3\lib\site-packages (from pandas>=0.24->yfinance==0.1.67) (2.8.1) Requirement already satisfied: pytz>=2017.3 in c:\users\younis\anaconda3\lib\site-packages (from pandas>=0.24->yfinance==0.1.67) (2021.1) Requirement already satisfied: six>=1.5 in c:\users\younis\anaconda3\lib\site-packages (from python-dateutil>=2.7.3->pandas>=0.24->yfinance==0.1.67) (1.15.0) Requirement already satisfied: idna<4,>=2.5 in c:\users\younis\anaconda3\lib\site-packages (from requests>=2.20->yfinance==0.1.67) (2.10) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\younis\anaconda3\lib\site-packages (from requests>=2.20->yfinance==0.1.67) (1.26.4) Requirement already satisfied: certifi>=2017.4.17 in c:\users\younis\anaconda3\lib\site-packages (from requests>=2.20->yfinance==0.1.67) (2022.5.18.1) Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\younis\anaconda3\lib\site-packages (from requests>=2.20->yfinance==0.1.67) (2.0.12)
'mamba' is not recognized as an internal or external command, operable program or batch file.
import yfinance as yf
import pandas as pd
import requests
from bs4 import BeautifulSoup
import plotly.graph_objects as go
from plotly.subplots import make_subplots
In this section, we define the function make_graph. You don't have to know how the function works, you should only care about the inputs. It takes a dataframe with stock data (dataframe must contain Date and Close columns), a dataframe with revenue data (dataframe must contain Date and Revenue columns), and the name of the stock.
def make_graph(stock_data, revenue_data, stock):
fig = make_subplots(rows=2, cols=1, shared_xaxes=True, subplot_titles=("Historical Share Price", "Historical Revenue"), vertical_spacing = .3)
stock_data_specific = stock_data[stock_data.Date <= '2021--06-14']
revenue_data_specific = revenue_data[revenue_data.Date <= '2021-04-30']
fig.add_trace(go.Scatter(x=pd.to_datetime(stock_data_specific.Date, infer_datetime_format=True), y=stock_data_specific.Close.astype("float"), name="Share Price"), row=1, col=1)
fig.add_trace(go.Scatter(x=pd.to_datetime(revenue_data_specific.Date, infer_datetime_format=True), y=revenue_data_specific.Revenue.astype("float"), name="Revenue"), row=2, col=1)
fig.update_xaxes(title_text="Date", row=1, col=1)
fig.update_xaxes(title_text="Date", row=2, col=1)
fig.update_yaxes(title_text="Price ($US)", row=1, col=1)
fig.update_yaxes(title_text="Revenue ($US Millions)", row=2, col=1)
fig.update_layout(showlegend=False,
height=900,
title=stock,
xaxis_rangeslider_visible=True)
fig.show()
Using the Ticker function enter the ticker symbol of the stock we want to extract data on to create a ticker object. The stock is Tesla and its ticker symbol is TSLA.
tsla = yf.Ticker("TSLA")
Using the ticker object and the function history extract stock information and save it in a dataframe named tesla_data. Set the period parameter to max so we get information for the maximum amount of time.
tesla_data = tsla.history(period = "max")
Reset the index using the reset_index(inplace=True) function on the tesla_data DataFrame and display the first five rows of the tesla_data dataframe using the head function. Take a screenshot of the results and code from the beginning of Question 1 to the results below.
tesla_data.reset_index(inplace = True)
tesla_data.head()
| Date | Open | High | Low | Close | Volume | Dividends | Stock Splits | |
|---|---|---|---|---|---|---|---|---|
| 0 | 2010-06-29 | 3.800 | 5.000 | 3.508 | 4.778 | 93831500 | 0 | 0.0 |
| 1 | 2010-06-30 | 5.158 | 6.084 | 4.660 | 4.766 | 85935500 | 0 | 0.0 |
| 2 | 2010-07-01 | 5.000 | 5.184 | 4.054 | 4.392 | 41094000 | 0 | 0.0 |
| 3 | 2010-07-02 | 4.600 | 4.620 | 3.742 | 3.840 | 25699000 | 0 | 0.0 |
| 4 | 2010-07-06 | 4.000 | 4.000 | 3.166 | 3.222 | 34334500 | 0 | 0.0 |
Use the requests library to download the webpage https://www.macrotrends.net/stocks/charts/TSLA/tesla/revenue. Save the text of the response as a variable named html_data.
url = "https://www.macrotrends.net/stocks/charts/TSLA/tesla/revenue"
html_page = requests.get(url).text
Parse the html data using beautiful_soup.
soup = BeautifulSoup(html_page, 'html5lib')
Using BeautifulSoup or the read_html function extract the table with Tesla Quarterly Revenue and store it into a dataframe named tesla_revenue. The dataframe should have columns Date and Revenue.
tesla_revenue = pd.read_html(str(soup))[1]
tesla_revenue.rename(columns = {"Tesla Quarterly Revenue(Millions of US $)":"Date", "Tesla Quarterly Revenue(Millions of US $).1": "Revenue"}, inplace = True)
tesla_revenue.head()
| Date | Revenue | |
|---|---|---|
| 0 | 2022-06-30 | $16,934 |
| 1 | 2022-03-31 | $18,756 |
| 2 | 2021-12-31 | $17,719 |
| 3 | 2021-09-30 | $13,757 |
| 4 | 2021-06-30 | $11,958 |
Execute the following line to remove the comma and dollar sign from the Revenue column.
tesla_revenue["Revenue"] = tesla_revenue['Revenue'].str.replace(',|\$',"")
C:\Users\Younis\AppData\Local\Temp\ipykernel_7960\349343550.py:1: FutureWarning: The default value of regex will change from True to False in a future version.
tesla_revenue["Revenue"] = tesla_revenue['Revenue'].str.replace(',|\$',"")
Execute the following lines to remove an null or empty strings in the Revenue column.
tesla_revenue.dropna(inplace=True)
tesla_revenue = tesla_revenue[tesla_revenue['Revenue'] != ""]
Display the last 5 row of the tesla_revenue dataframe using the tail function. Take a screenshot of the results.
tesla_revenue.tail()
| Date | Revenue | |
|---|---|---|
| 47 | 2010-09-30 | 31 |
| 48 | 2010-06-30 | 28 |
| 49 | 2010-03-31 | 21 |
| 51 | 2009-09-30 | 46 |
| 52 | 2009-06-30 | 27 |
Using the Ticker function enter the ticker symbol of the stock we want to extract data on to create a ticker object. The stock is GameStop and its ticker symbol is GME.
game_stop = yf.Ticker("GME")
Using the ticker object and the function history extract stock information and save it in a dataframe named gme_data. Set the period parameter to max so we get information for the maximum amount of time.
gme_data = game_stop.history(period = "max")
Reset the index using the reset_index(inplace=True) function on the gme_data DataFrame and display the first five rows of the gme_data dataframe using the head function. Take a screenshot of the results and code from the beginning of Question 3 to the results below.
gme_data.reset_index(inplace = True)
gme_data.head()
| Date | Open | High | Low | Close | Volume | Dividends | Stock Splits | |
|---|---|---|---|---|---|---|---|---|
| 0 | 2002-02-13 | 1.620128 | 1.693350 | 1.603296 | 1.691667 | 76216000 | 0.0 | 0.0 |
| 1 | 2002-02-14 | 1.712708 | 1.716074 | 1.670626 | 1.683251 | 11021600 | 0.0 | 0.0 |
| 2 | 2002-02-15 | 1.683250 | 1.687458 | 1.658002 | 1.674834 | 8389600 | 0.0 | 0.0 |
| 3 | 2002-02-19 | 1.666417 | 1.666417 | 1.578047 | 1.607504 | 7410400 | 0.0 | 0.0 |
| 4 | 2002-02-20 | 1.615920 | 1.662210 | 1.603296 | 1.662210 | 6892800 | 0.0 | 0.0 |
Use the requests library to download the webpage https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-PY0220EN-SkillsNetwork/labs/project/stock.html. Save the text of the response as a variable named html_data.
url = "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-PY0220EN-SkillsNetwork/labs/project/stock.html"
html_data = requests.get(url).text
Parse the html data using beautiful_soup.
soup = BeautifulSoup(html_data, "html5lib")
Using BeautifulSoup or the read_html function extract the table with GameStop Quarterly Revenue and store it into a dataframe named gme_revenue. The dataframe should have columns Date and Revenue. Make sure the comma and dollar sign is removed from the Revenue column using a method similar to what you did in Question 2.
gme_revenue = pd.read_html(str(soup))[1]
gme_revenue.rename(columns = {"GameStop Quarterly Revenue(Millions of US $)":"Date","GameStop Quarterly Revenue(Millions of US $).1":"Revenue"}, inplace = True)
gme_revenue["Revenue"] = gme_revenue['Revenue'].str.replace(',|\$',"")
gme_revenue.dropna(inplace=True)
gme_revenue = gme_revenue[gme_revenue['Revenue'] != ""]
gme_revenue.head()
C:\Users\Younis\AppData\Local\Temp\ipykernel_7960\57325163.py:3: FutureWarning: The default value of regex will change from True to False in a future version.
gme_revenue["Revenue"] = gme_revenue['Revenue'].str.replace(',|\$',"")
| Date | Revenue | |
|---|---|---|
| 0 | 2020-04-30 | 1021 |
| 1 | 2020-01-31 | 2194 |
| 2 | 2019-10-31 | 1439 |
| 3 | 2019-07-31 | 1286 |
| 4 | 2019-04-30 | 1548 |
Display the last five rows of the gme_revenue dataframe using the tail function. Take a screenshot of the results.
gme_revenue.tail()
| Date | Revenue | |
|---|---|---|
| 57 | 2006-01-31 | 1667 |
| 58 | 2005-10-31 | 534 |
| 59 | 2005-07-31 | 416 |
| 60 | 2005-04-30 | 475 |
| 61 | 2005-01-31 | 709 |
Use the make_graph function to graph the Tesla Stock Data, also provide a title for the graph. The structure to call the make_graph function is make_graph(tesla_data, tesla_revenue, 'Tesla'). Note the graph will only show data upto June 2021.
make_graph(tesla_data, tesla_revenue, 'Tesla')
Use the make_graph function to graph the GameStop Stock Data, also provide a title for the graph. The structure to call the make_graph function is make_graph(gme_data, gme_revenue, 'GameStop'). Note the graph will only show data upto June 2021.
make_graph(gme_data, gme_revenue, 'GameStop')